import("java.io.File")
import("java.lang.*")
import("java.util.Arrays")
import("android.content.Context")
import("android.hardware.Sensor")
import("android.hardware.SensorEvent")
import("android.hardware.SensorEventListener")
import("android.hardware.SensorManager")
import("com.nx.assist.lua.LuaEngine")
import("com.nx.assist.lua.PaddleOcr")
mkdir(getSdPath() .. "/config")
--[===[setStopCallBack(function()
setDpiToRealy()
end)]===]
id = createHUD()
DDMControl = require("DDMControlV2")
require("TomatoOCR")
require("热更新")
--r = PaddleOcr.loadModel(true)
_ENV["SD卡路径"] = getSdPath() .. "/config/"
require("初始化程序")
require("封装函数")
--require("MQTT通信")
require("功能子程序")
require("mq中控通讯")
require("主线任务")
require("野外打怪")
require("基本操作")
require("兑换鸭币")
require("角色强化")
require("分类页面找色")
require("图灵识别字库")
require("副本.满月宴会")
_ENV["超时时间"] = rnd(10 , 40) ----秒
_ENV["运行状态"] = "准备运行"
_ENV["当前任务"] = "运行脚本"
_ENV["匹对结果"] = "等待匹配"
_ENV["小号等级"] = 33
print(_ENV["小号等级"])
_ENV["停止自动关闭UI"] = false

-- 在UI界面显示之前读取保存的苹果账号和密码
local 苹果账号记录 = _ENV["文件_读取记录"]("苹果账号")
if 苹果账号记录 and 苹果账号记录["记录内容"] then
    _ENV["苹果账号"] = 苹果账号记录["记录内容"]
    _ENV["调试输出"]("已加载保存的苹果账号: " .. _ENV["苹果账号"], true)
end

local 苹果密码记录 = _ENV["文件_读取记录"]("苹果密码")
if 苹果密码记录 and 苹果密码记录["记录内容"] then
    _ENV["苹果密码"] = 苹果密码记录["记录内容"]
    _ENV["调试输出"]("已加载保存的苹果密码", true)
end

进入副本时间 = rnd(1 , 20)
职业 = "猎人"
星期几 = 取星期几()
之前经验值 = "23"
活动副本进入时间 = rnd(1 , 24)
委托刷新时间 = 12
setControlBarPosNew(0 , 0.58)
繁荣任务 = 0
缓存释放()




----------------------调试区域  -------------------------------------调试区域---------------------------------------
----------------------调试区域  -------------------------------------调试区域---------------------------------------
--[===[文字=_ENV["文字识别"](300,85,1827,208, 3)
print(文字)]===]
--等级=100
--强化_装备精工 ()
--等级=100


--强化_炼金术 ()
--[===[local 颜色计数1 = {
    蓝 = 1,
    红 = 3,
    绿 = 0,
    黄 = 1,
    紫 = 1
}

local 颜色计数2 = {
    蓝 = 3,
    红 = 2,
    绿 = 0,
    黄 = 1,
    紫 = 1
}]===]
--合并颜色计数("第一排" ,颜色计数1, 颜色计数2)


--print(_ENV["文件_读取记录"]("一排1"))

--
--返回结果,识别结果=炼成识别( "一排1"  , "红|黄",1)
--print(返回结果,识别结果,识别结果[1])

--炼成佩戴("一排1" , 识别结果)


--
--使用背包指定物品 ("魔力箱子" )
--强化_魔力注入 ()

--[===[if 	_ENV["文字寻找精准"](643,805,786,860, 3 , "防御|命中" , false) then
			_ENV["调试输出"]("防御|命中" , true , 500)
			end]===]
----------------------调试区域  -------------------------------------调试区域---------------------------------------
----------------------调试区域  -------------------------------------调试区域---------------------------------------

function onUIEvent(handle , event , arg1 , arg2 , arg3)
	if event == "onload" then
		print("窗口被加载了")
		onLoadEvent(handle)
	elseif event == "onclick" then
		print("按钮点击事件:" , arg1 , arg2)
		keyPress("home")
	elseif event == "onchecked" then
		print("多选框选中或反选事件:" , arg1 , arg2)
	elseif event == "onselected" then
		print("单选框或者下拉框事件:" , arg1 , arg2)
	elseif event == "onclose" then
		print("关闭窗口" , arg1)
		_ENV["停止自动关闭UI"] = true
		closeWindow(handle , arg1)
	elseif event == "onwebviewjsevent" then
		print("webview事件" , arg1 , arg2 , arg3)
	end
end

_ENV["执行程序"] = function()
	_ENV["调试输出"](_ENV["配置信息"]["执行任务"].."任务开始" , true , 1000)
	_ENV["调试输出"]( tostring(_ENV["配置信息"]["执行任务"]) , true , 3000)
	----------------------调试区域  -------------------------------------调试区域---------------------------------------
	--菜单_交易所上架 (4 , true)
	--强化_魔力注入 ()
	----------------------调试区域  -------------------------------------调试区域---------------------------------------
	----------------------调试区域  -------------------------------------调试区域---------------------------------------
	for i = 1 , 99999 do
		--功能_激战地挂机(120)
		--职业技能摆放(23,true)
		--药品检测并购买 ()
		
		_ENV["调试输出"]("当前主任务: " .. _ENV["配置信息"]["执行任务"] , true , 2300)
		
		if _ENV["配置信息"]["执行任务"] == "查询燃料费" or _ENV["配置信息"]["执行任务"] == "发送代币" then
			
		elseif _ENV["配置信息"]["执行任务"] ~= "代币兑换" 
		   and _ENV["配置信息"]["执行任务"] ~= "重连钱包" 
		   and _ENV["配置信息"]["执行任务"] ~= "一键主线"
		   and _ENV["配置信息"]["执行任务"] ~= "委托制作" then
			if 功能_判断游戏中页面 ()  == false then
				功能_KIT检测()
				进入游戏(_ENV["游戏账号"] , _ENV["游戏密码"] , _ENV["辅助邮箱"] , _ENV["服务器"] , _ENV["职业"] , _ENV["调用程序"] , _ENV["特殊要求"])
			end
			_ENV["鼠标_随机点击"](1870 , 129 , 1000 , 2000)-- 关闭背包
			_ENV["鼠标_随机点击"](1335 , 977 , 2000 , 3000)-- 点击回城			
			个人信息汇总()	
			if 图色_多点找色Ex(找色_复活十字架 , 0.9 , 0 , 0 , 0 , 1 , true ) then
				恢复经验 ()
			end
			--收藏处理 (true)
			--require("任务.每日任务").定时执行_每日任务检测(require("configs.Config").任务刷新时间.每日任务刷新时间 , true)
			回到据点()
		else
			进入游戏(_ENV["游戏账号"] , _ENV["游戏密码"] , _ENV["辅助邮箱"] , _ENV["服务器"] , _ENV["职业"] , _ENV["调用程序"] , _ENV["特殊要求"])
			
		end
		功能_发送消息游戏中()
		setControlBarPosNew(0 , 0.58)
		
		-------------------临时任务-------------------------
		-------------------临时任务-------------------------
		--野外定点刷怪 ("德尔菲亚矿山" , 60 , 时长)
		
		-------------------临时任务-------------------------
		-------------------临时任务-------------------------
		
		if _ENV["配置信息"]["执行任务"] == "野外刷怪" then
			野外定点刷怪 (_ENV["配置信息"]["定点挂机地图"] , 100)
			
		elseif _ENV["配置信息"]["执行任务"] == "一键主线" then
			print("一键主线11111")
			require("功能.初始化功能.初始化一键购买杂货设置").检测并初始化一键购买杂货设置()
			require("功能.初始化功能.初始化设置药水栏").检测并摆放药水位置()
			require("功能.初始化功能.初始化系统设置").检测并初始化系统设置()
			任务_一键主线 ()
		elseif _ENV["配置信息"]["执行任务"] == "激战地挂机" then
			print("激战地挂机1")
			功能_激战地挂机()
		elseif _ENV["配置信息"]["执行任务"] == "差价买卖" then
			print("差价买卖")
			--功能_交易所购买物品 ()
			
		elseif _ENV["配置信息"]["执行任务"] == "币价监测" then
			
			功能_代币价格提醒()
		elseif _ENV["配置信息"]["执行任务"] == "委托制作" then
			--[[for i = 1 , 9999 do
				功能_委托所接任务 (1 , true)         --屏蔽委托任务
				功能_等级战力打野分配(80)
			end
			--]]
			_ENV["调试输出"]("制作内甲开始" , true , 3000)
			require("功能.一键制作紫色材料.制作破旧的内甲").一键制作内甲()
			_ENV["调试输出"]("制作内甲结束" , true , 100000)
		elseif _ENV["配置信息"]["执行任务"] == "世交所倒币" then
			
			--功能_世界交易所倒货 ()
			--功能_世界交易所倒货紫 ("活力香炉")
			任务_一键主线 ()
		elseif _ENV["配置信息"]["执行任务"] == "代币兑换" then
			
			刷新信息()
			
			功能_代币兑换("夜鸭币" )
			--功能_代币兑换("烟水晶币")
			for i = 1 , 600 do
				
				if _ENV["图色_多点找色Ex"](找色_已铸币代币 , 0.9 , 0 , 0 , 0 , 1 , false) then
					
					_ENV["客户_消息发送"](中控索引.连接钱包 , "铸币成功")
					return true
				end
				_ENV["调试输出"]("等待铸币结果"..i , true , 300)
				
			end
			
			_ENV["客户_消息发送"](中控索引.连接钱包 , "铸币失败")
			return false
			
		elseif _ENV["配置信息"]["执行任务"] == "小号定点" then
			功能_定点防掉线()
			
		elseif _ENV["配置信息"]["执行任务"] == "重连钱包" then
			
			等级识别()
			
			功能_任务重新连接钱包()
			return true
		elseif _ENV["配置信息"]["执行任务"] == "发送代币" then
			for i = 1 , 3 do
				if 功能_查询发送代币 () == - 1 then
					
				else
					break
				end
			end
			return true
		elseif _ENV["配置信息"]["执行任务"] == "查询燃料费" then
			功能_查询发送代币 ("查询燃料费")
			return true
		end
		
	end
	_ENV["运行状态"] = "全部任务完成"
	
end

local ret = showUI("太阳伞N8.ui" , 800 , 800 , onUIEvent)
print(ret)
local arr = jsonLib.decode(ret)
print( arr)
_ENV["编号"] = arr["page0"]["输入框编号"]
_ENV["IP地址"] = arr["page0"]["输入框中控地址"]
_ENV["中控秘钥"] = arr["page0"]["输入框中控秘钥"]
_ENV["是否接入中控"] = arr["page0"]["接入中控"]
-- 从UI界面获取苹果账号和密码，如果UI中有值则覆盖保存的值
if arr["page0"]["输入框苹果账号"] and arr["page0"]["输入框苹果账号"] ~= "" then
    _ENV["苹果账号"] = arr["page0"]["输入框苹果账号"]
end
if arr["page0"]["输入框苹果密码"] and arr["page0"]["输入框苹果密码"] ~= "" then
    _ENV["苹果密码"] = arr["page0"]["输入框苹果密码"]
end

print( _ENV["编号"])
print( _ENV["IP地址"])
print( _ENV["是否接入中控"])
print( _ENV["苹果账号"])
print( _ENV["苹果密码"])
	


local function 初始化配置()
	if _ENV["中控秘钥"] == "" or _ENV["编号"] == "" then
		
		while true do
			showHUD(id , "秘钥或编号未填写" , 10 , "0xffffff00" , " 0xFFFF0000" , 1 , 100 , 230 , 230 , 90 , 3 , 3 , 3 , 3 , 0)
			sleep(5000)
		end
	end

	if _ENV["是否接入中控"] == "0" then
		setControlBarPosNew(0 , 0.58)
		while true do
			_ENV["连接服务"]()
			for i = 1 , 10 do
				if _ENV["配置信息"] == nli then
					_ENV["调试输出"]("请求数据"..i , true)
					_ENV["客户_消息发送"](中控索引.请求数据 , "请求数据")
					sleep(500)
					
				end
				for i = 1 , 10 do
					if _ENV["配置信息"] ~= nli then
						if _ENV["配置信息"]["执行任务"] == nli or _ENV["配置信息"]["执行任务"] == "" then
							showHUD(id , "当前设置错误\n手机号未匹配" , 10 , "0xffffff00" , " 0xFFFF0000" , 1 , 100 , 230 , 230 , 90 , 3 , 3 , 3 , 3 , 0)
						end
						
						if 	 _ENV["配置信息"]["小号等级"] and _ENV["配置信息"]["小号等级"]~= "" then
							_ENV["小号等级"] = tonumber(_ENV["配置信息"]["小号等级"])
							print(_ENV["小号等级"])
							
						end
						print(_ENV["小号等级"])
						_ENV["调试输出"]("匹配成功" , true )
						break
					end
					sleep(1000)
				end
				
				if _ENV["配置信息"] ~= nli then
					break
				end
			end
			
			if _ENV["配置信息"] == nli then
				
				_ENV["记录配置信息"] = _ENV["文件_读取记录"]("配置信息")
				_ENV["配置信息"] = _ENV["记录配置信息"]["记录内容"]
				--showHUD(id , "使用记录配置" , 10 , "0xffffff00" , " 0xFFFF0000" , 1 , 100 , 230 , 230 , 90 , 3 , 3 , 3 , 3 , 0)
				--_ENV["客户_消息发送"](3 , "上次记录任务")
			end
			
			if _ENV["配置信息"] == nli then
				_ENV["配置信息"] = _ENV["内置配置信息"]
				showHUD(id , "使用内置配置" , 10 , "0xffffff00" , " 0xFFFF0000" , 1 , 100 , 230 , 230 , 90 , 3 , 3 , 3 , 3 , 0)
				--_ENV["客户_消息发送"](3 , "内置一键主线")
			end
			
			break
		end
		
	else
		
		if _ENV["配置信息"] == nli then
			
			_ENV["记录配置信息"] = _ENV["文件_读取记录"]("配置信息")
			_ENV["配置信息"] = _ENV["记录配置信息"]["记录内容"]
			showHUD(id , "断中控记录配置" , 10 , "0xffffff00" , " 0xFFFF0000" , 1 , 100 , 230 , 230 , 90 , 3 , 3 , 3 , 3 , 0)
			--_ENV["客户_消息发送"](3 , "上次记录任务")
		end
		
		if _ENV["配置信息"] == nli then
			_ENV["配置信息"] = _ENV["内置配置信息"]
			showHUD(id , "断中控内置配置" , 10 , "0xffffff00" , " 0xFFFF0000" , 1 , 100 , 230 , 230 , 90 , 3 , 3 , 3 , 3 , 0)
			--_ENV["客户_消息发送"](3 , "内置一键主线")
		end
	end
end
-------------------------------------------------卡密下==================================================================
--[===[DDMControl["云控_连接云控系统"]()


登录结果 = DDMControl["卡密_卡密登录"]("换成你自己的", "换成你自己的", "x6f335", _ENV["验证_心跳回调"], true, false, 60)
print(登录结果)
if 登录结果.code == 0 then
print("卡密被禁用")
toast("登录失败,错误信息:" .. 登录结果.msg, 0, 0, 12)
sleep(2000)
exitScript()
elseif 登录结果.code == -1 then
print("网络错误,请检查网络!")
elseif 登录结果.code == 1 then
toast("卡密登录成功!", 0, 0, 12)
print("卡密登录成功!")
elseif 登录结果.code == -9 then
print("卡密授权窗口达到上限,登录失败!")
exitScript()
elseif 登录结果.code == -7 then
print("卡密过期!")
sleep(2000)
exitScript()
function thread_func(arg)

while var.exit do
print("我是子线程")
sleep(1000)
end
end


local th = Thread.newThread(thread_func,11)
sleep(3000)
th:stopThread()
else
print("未知错误!", 登录结果.msg)
toast("登录失败,错误信息:" .. 登录结果.msg, 0, 0, 12)
sleep(2000)
exitScript()
end]===]
-------------------------------------------------卡密上==================================================================
_ENV["验证程序"] = function()
	-- 预定义结构复用
	
	-- 状态处理器(数组索引式)
	local 状态处理 = {
		[1] = function() -- 运行脚本
			if not _ENV["线程ID"] then
				local tid = beginThread(_ENV["主程序"] , 1)
				if tid then
					_ENV["线程ID"] = tid
					
				end
			end
		end ,
		
		[2] = function() -- 停止运行
			if _ENV["线程ID"] then
				_ENV["线程ID"]:stopThread()
				_ENV["线程ID"] = nil
			end
			
			_ENV["客户_消息发送"](中控索引.运行状态 , "停止运行")
			_ENV["运行状态"] = "停止运行"
			
			showControlBar(true)
		end ,
		
		[3] = function() -- 暂停运行
			
			_ENV["客户_消息发送"](中控索引.运行状态 , "暂停运行")
			_ENV["运行状态"] = "暂停运行"
		end ,
		
		[4] = function() -- 恢复运行
			
			_ENV["客户_消息发送"](中控索引.运行状态 , "正常运行")
			_ENV["运行状态"] = "正常运行"
			
		end ,
		
		[5] = function() -- 重启脚本
			math.randomseed(os.time()) -- 初始化随机数种子
			local delay_ms = math.random(100 , 5000) -- 生成100-2000毫秒的随机数
			sleep(delay_ms)
			restartScript()
			
			_ENV["客户_消息发送"](中控索引.运行状态 , "重启脚本")
			_ENV["调试输出"]("重启脚本中" , true)
		end ,
		
		[6] = function() -- 更新脚本
			restartScript()
			_ENV["调试输出"]("重启成功" , true , 5000)
			_ENV["客户_消息发送"](中控索引.运行状态 , "更新脚本")
		end ,
		
		[7] = function()-- 重启MQTT
			client:disconnect()
			_ENV["调试输出"]("重启MQTT" , true )
			require("mq中控通讯")
			sleep(1000)
			_ENV["客户_消息发送"](中控索引.请求数据 , "请求数据")
			_ENV["当前任务"] = "等待命令"
		end ,
		
		[8] = function()-- 等待命令
			
			_ENV["调试输出"]("等待命令" , true )
			
		end ,
		[9] = function()-- 结束脚本
			
			_ENV["调试输出"]("结束脚本" , true )
			exitScript()
		end
	}
	
	-- 状态映射表（字符串→索引）
	local 状态映射 = {
		["运行脚本"] = 1 ,
		["停止运行"] = 2 ,
		["暂停运行"] = 3 ,
		["恢复运行"] = 4 ,
		["重启脚本"] = 5 ,
		["更新脚本"] = 6 ,
		["重启mqqt"] = 7 ,
		["等待命令"] = 8 ,
		["结束脚本"] = 9 ,
	}
	
	-- 主循环（内存优化版）
	local 最后状态 , 最后检测 = nil , 0
	while true do
		local 当前任务 = _ENV["当前任务"]
		
		-- 状态变化处理
		if 当前任务 ~= 最后状态 then
			最后状态 = 当前任务
			local 处理器 = 状态处理[状态映射[当前任务] or 0]
			if 处理器 then 处理器() end
		end
		
		-- 低频检测（20秒/次）
		local now = os.time()
		if now - 最后检测 > 20 then
			-- 全部任务完成检测
			if _ENV["运行状态"] == "全部任务完成" and not _ENV["刷新完成状态"] then
				固定消息.运行状态 = "全部任务完成"
				
			end
			
			最后检测 = now
		end
		
		-- 动态休眠（降低CPU占用）
		sleep(当前任务 and 800 or 3000) -- 有任务时0.8秒，空闲时3秒
	end
end

_ENV["主程序"] = function()
	
	DDMControl["脚本_异常捕获运行"](_ENV["执行程序"] , 2 , nil , " b5caa58e772c45f8978e32334024c54e" )--异常捕获换你自己的
end

local function 开始运行()
	初始化配置()
	DDMControl["脚本_异常捕获运行"](_ENV["验证程序"] , 2 , nil , " b5caa58e772c45f8978e32334024c54e" )--异常捕获换你自己的
end

local function 测试()
	--require("任务.每日委托任务").Test()
	--require("功能.初始化功能.初始化设置药水栏").Test()
	--require("功能.初始化功能.初始化系统设置").Test()manm
	--require("功能.背包.背包清理").Test()
	--require("功能.背包.背包开箱子").Test()
	--require("功能.一键制作紫色材料.制作破旧的内甲").Test()
	--require("副本.伊莱塔神殿").Test()
	初始化配置()
	使用背包指定物品("伊莱塔时间补充装置") 
	--require("功能.购买伊莱塔神殿物品.伊莱塔神殿物品购买").每日购买伊莱塔神殿补充时间()
end


--测试()
开始运行()


